﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;
using BLL.Validation;
using System.Linq.Expressions;
using DAL;
using DAL.IRepository;

namespace BLL
{     
    public class LopHocManager : IValidator<LopHoc>
    {         
        private readonly IGeneralRepository<LopHoc> _repository;

        public LopHocManager(IGeneralRepository<LopHoc> itr)
        {
            _repository = itr;
        }

        public ValidationResult Validate(LopHoc lophoc)
        {
            var vResult = new ValidationResult();

             
            if (lophoc.SiSo <= 0)
                vResult.Messages.Add("Sỉ số phải lớn hơn 0");           
            return vResult;
        }


        public ActionResult InsertOrUpdate(LopHoc lophoc)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(lophoc))
                    aResult.Exceptions.Add(new Exception("Thêm mới lớp học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(LopHoc lophoc)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(lophoc))
                    aResult.Exceptions.Add(new Exception("Xóa thông tin lớp học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResult Delete(string lophocId)
        {
            var aResult = new ActionResult();
            try
            {
                if (!_repository.Delete(t => t.MaLop == lophocId))
                    aResult.Exceptions.Add(new Exception("Xóa thông tin lớp học không thành công"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ActionResultAsList<LopHoc> Find(Expression<Func<LopHoc, bool>> predicate)
        {
            var aResult = new ActionResultAsList<LopHoc>();
            try
            {
                aResult.Result = _repository.Find(predicate).ToList();
                if (aResult.Result.Count == 0)
                    aResult.Exceptions.Add(new Exception("Không tìm thấy lớp học thỏa điều kiện"));
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

    }
}
